package org.madmatrix.glib.log;

import java.util.HashMap;
import java.util.Map;

/**
 * 
 * 日志工厂
 * 
 * @author madmatrix
 */
public class LoggerFactory {

	/**
	 * 日志开关
	 */
	public static boolean enableLogger = true;

	/**
	 * 日志类型：控制台
	 */
	public static final int LOG_TYPE_CONSOLE = 1;

	/**
	 * 日志类型：文件
	 */
	public static final int LOG_TYPE_FILE = 2;

	private static Map<String, ILogger> loggerMap = new HashMap<String, ILogger>();

	/**
	 * 默认的日志类型为控制台日志
	 */
	private static int logType = LOG_TYPE_CONSOLE;

	/**
	 * 文件日志存储的路径
	 */
	private static String fileLogDir;

	/**
	 * 获取日志接口，该类会以class的短名作为tag
	 * 
	 * @param c
	 * @return
	 */
	public static ILogger getLogger(Class<?> c) {
		return getLogger(c.getSimpleName());
	}

	/**
	 * 获取日志
	 * 
	 * @param name
	 *            日志名称，该名称最终会作为logcat的tag字段
	 * @return
	 */
	public static ILogger getLogger(String name) {
		ILogger logger = loggerMap.get(name);
		if (null == logger) {
			switch (logType) {
			case LOG_TYPE_CONSOLE:
				logger = new ConsoleLogger(name);

				break;
			case LOG_TYPE_FILE:
				logger = new FileLogger(name, fileLogDir);

				break;
			}

			loggerMap.put(name, logger);
		}

		return logger;
	}

	/**
	 * 
	 * @param logType
	 *            日志类型
	 */
	public void setLogType(int logType, String fileLogDir) {
		LoggerFactory.logType = logType;
	}

	/**
	 * 设置FileLogger的日志存放路径 在使用之前必须设置
	 * 
	 * @param fileLogDir
	 *            文件日志路径，当logType=LOG_TYPE_FILE的时候，该值不能为空
	 */
	public void setFileLogDir(String fileLogDir) {
		LoggerFactory.fileLogDir = fileLogDir;
	}
}
